M = 998244353; R = [1] def ntt(P): n = k = len(P); P = [*P]; Z = [0]*n while 2*len(R) < n: u = pow(3, M//(4*len(R)), M); R.extend([r*u%M for r in R]) # 3 is a primitive root of M while k > 1: for i in range(n//k): r = R[i] for j in range(i*k, i*k+k//2): z = r*P[j+k//2]; P[j+k//2] = (P[j]-z)%M; P[j] = (P[j]+z)%M k >>= 1 for i in range(1, n): Z[i] = Z[i//2]//2+(i&1)*n//2 return [P[r] for r in Z] input(); a = [*map(int, input().split())]; b = [*map(int, input().split())] p1 = [0]*(2*10**5+1); p2 = [0]*(2*10**5+1) for i in a: p1[i+10**5] += 1 for i in b: p2[i+10**5] += 1 m = len(p1)+len(p2)-1; n = 1 while n < m: n *= 2 p1 += [0]*(n-len(p1)); p2 += [0]*(n-len(p2)); ntt1 = ntt(p1); ntt2 = ntt(p2) z = pow(n, -1, M); p = ntt([ntt1[-i]*ntt2[-i]%M*z%M for i in range(n)])[:m] while len(p) > 1 and p[-1] == 0: p.pop() p = {i:p[i] for i in range(len(p))} for _ in range(int(input())): print(p.get(int(input())+2*10**5, 0))